#ifndef G3_LUA_HANDLER_H
#define G3_LUA_HANDLER_H

#include "file/f_stream.h"
#include "singleton.h"

extern "C" {
    #include <lua5.1/lua.h>
    #include <lua5.1/lualib.h>
    #include <lua5.1/lauxlib.h>
}

namespace G3 {

extern const long LuaBufferSize;

//==============================================================================
// Lua reader callback for stream reading
//==============================================================================
const char *LuaStreamReader (lua_State *aState, void *aUserData, size_t *aSize);

class LUA_HANDLER: public G3::SINGLETON<LUA_HANDLER> {
	private:
		bool Init ();

	public:
		LUA_HANDLER ();
		~LUA_HANDLER ();

		G3::LOG *Log;
		lua_State* LuaState;

//==============================================================================
// Loads and executes a Lua script from a stream
//==============================================================================
		int Execute (STREAM *aStream);

//==============================================================================
// Loads standard function / variable bindings
//==============================================================================
		void LoadStdlibs ();
};

extern LUA_HANDLER MainLuaHandler;

}

#endif
